#include <stdio.h>
#include <stdlib.h>

typedef struct list {
    int *data;
    int last;
    int size;   //保存数组长度
} list_t;

/**
 * 创建一个空的顺序表
 */
list_t *create_list(int size)
{
    list_t *p;
    p = malloc(sizeof(list_t));
    if(NULL == p) return NULL;
    p->data = malloc(size * sizeof(int));
    p->last = -1; //(*p).last
    p->size = size;

    return p;
}

int del_index_list(list_t *p, int index) {
    //1.移动下面的数据
    //2.last --
    int i;
    if(index == p->last) {
        p->data[i] = 0;
    } else {
        for(i = index; i < p->last; i++) {
            p->data[i] = p->data[i + 1];
        }
    }
    p->last--;
    return 0;
}

int insert_index_list(list_t *p, int index, int data)
{
    int i;
    if(NULL == p) return -1;
    if(p->size - 1 == p->last) return -1;    //容器已满
    if(index > p->size-1 || index < 0) return -1;

    // 1. 移动插入位置之下的数据
    for(i = p->last; i >= index;i--) {
        p->data[i+1] = p->data[i];
    }
    // 2. 将数据写入对应位置
    p->data[index] = data;
    // 3. 尾元素位置下标标识加1
    p->last ++;

    return 0;
}

void print_list(list_t *p) {
    int i;
    for(i = 0; i < p->last; i++) {
        printf("%d-%d\n", i, p->data[i]);
    }
    printf("\np->last = %d\n", p->last);
}

int main(int argc, const char *argv[])
{
    int i;
    list_t *p = NULL;
    p = create_list(8);

    for(i = 0;i < 7; i++) {
        insert_index_list(p, 0, 10);
    }
    insert_index_list(p, 4, 40);
    print_list(p);

    del_index_list(p, 4);
    print_list(p);

    return 0;
}

